package vista;

import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import modelo.automata.AutomataFinitoDeterminista;
import modelo.automata.AutomataFinitoNoDeterminista;
import vista.frame.MainFrame;

/**
 *
 * @author Andres Otalora
 */
public class Main {
    public static void main(String ...args) {
//        javax.swing.SwingUtilities.invokeLater(new Runnable() {
//            public void run() {
//                MainFrame mainFrame = new MainFrame("Autoestudio automatas");
//            }
//        });
        List<String> conjuntoDeEstados = Arrays.asList("q1", "q3", "q2", "q4");
        List<String> alfabetoEntrada = Arrays.asList("a", "b");
        String estadoInicial = "q1";
        List<String> conjuntoEstadosFinales = Arrays.asList("q2");
        String[][] tablaDeTransiciones = {
            {"q3","q4"},  
            {"q2","q3"},  
            {"q4","q4"},  
            {"q1","q3"}  
        };
        String[] cadena = {"a","a"};
        if(AutomataFinitoDeterminista.esDeterminista(conjuntoDeEstados, tablaDeTransiciones)) {
            System.out.println("Es determinista");
            AutomataFinitoDeterminista AFD = new AutomataFinitoDeterminista(conjuntoDeEstados, 
                                    alfabetoEntrada, estadoInicial, conjuntoEstadosFinales, tablaDeTransiciones);
            AFD.eliminarEstadosInaccesibles();
            AutomataFinitoDeterminista comAFD = AFD.complemento(AFD);
            
            try {
                if(comAFD.lectura(cadena)) {
                    System.out.println("Si acepta.");
                } else {
                    System.out.println("No acepta.");
                }
            } catch (Exception ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else {
            System.out.println("\nNo es determinista");
        }
        
    }        
}
